<?php

class Rubricas_Model extends CI_Model {

    function combo_rubricas() {
        $this->db->select('idRubrica, nombre');
        $this->db->order_by("nombre", "asc");
        $resultado = $this->db->get('rubrica')->result_array();

        return $resultado;
    }

    function combo_tipoNiveles() {
        $this->db->select('idTiponivel, nombre, descripcion');
        $this->db->order_by("nombre", "asc");
        $resultado = $this->db->get('tiponivel')->result_array();

        return $resultado;
    }

    function combo_cursos() {
        $this->db->select('idCurso, nombre');
        $this->db->order_by("nombre", "asc");
        $resultado = $this->db->get('curso')->result_array();

        return $resultado;
    }

    function buscar_niveles($idTiponivel) {
        $this->db->select('idNivel, nombre, valor');
        $this->db->where('idTiponivel', $idTiponivel);
        $query = $this->db->get('nivel');

        if ($query->num_rows() > 0) {
            return $query->result_array();
        } else {
            return false;
        }
    }

    function registra_niveles($data, $listaEscala) {

        $this->db->trans_start();
        $this->db->trans_complete();


        $data = array(
            'nombre' => $data['nombreNivel'],
            'descripcion' => $data['descripcionNivel']
        );
        $this->db->insert('nivel', $data);







        if ($this->db->trans_status() === FALSE)
            $mensaje = "error";
        else
            $mensaje = "ok";

        return $mensaje;
    }

    function registrar_rubrica($rubrica, $datosRub) {

        $this->db->trans_start();

        //REGISTRAR RÚBRICA
        $data1 = array(
            'nombre' => $datosRub['nombreRubrica'],
            'descripcion' => $datosRub['descripcionRubrica'],
            'idTiponivel' => $datosRub['tiponiveles']
        );
        $this->db->insert('rubrica', $data1);
        $idRubrica = $this->db->insert_id();

        foreach ($rubrica['resultados'] as $resultado) {
            //REGISTRAR RESULTADO
            $data2 = array(
                'nombre' => $resultado['nombre'],
                'descripcion' => $resultado['descripcion'],
                'idRubrica' => $idRubrica
            );
            $this->db->insert('resultado', $data2);
            $idResultado = $this->db->insert_id();

            foreach ($resultado['aspectos'] as $aspecto) {
                //REGISTRAR ASPECTO
                $data3 = array(
                    'nombre' => $aspecto['nombre'],
                    'descripcion' => $aspecto['descripcion'],
                    'idResultado' => $idResultado
                );
                $this->db->insert('aspecto', $data3);
                $idAspecto = $this->db->insert_id();

                foreach ($aspecto['criterios'] as $criterio) {
                    //REGISTRAR CRITERIO
                    $data4 = array(
                        'nombre' => $criterio['nombre'],
                        'descripcion' => $criterio['descripcion'],
                        'idAspecto' => $idAspecto
                    );
                    $this->db->insert('criterio', $data4);
                    $idCriterio = $this->db->insert_id();

                    foreach ($criterio['niveles'] as $nivel) {
                        $data5 = array(
                            'idCriterio' => $idCriterio,
                            'idNivel' => $nivel['idNivel'],
                            'valor' => $nivel['valor'],
                            'descripcion' => $nivel['descripcion']
                        );
                        $this->db->insert('criterioxnivel', $data5);
                    }
                }
            }
        }

        $this->db->trans_complete();

        if ($this->db->trans_status() === FALSE)
            $mensaje = "error";
        else
            $mensaje = "ok";

        return $mensaje;
    }

    function buscar_ids_arbol($idRubrica) {
        $cad = 'SELECT CONCAT("id_res_",res.idResultado) as idResultado, CONCAT("id_asp_",asp.idAspecto) as idAspecto
                FROM resultado res,  aspecto asp, criterio crit
                WHERE res.idResultado = asp.idResultado AND asp.idAspecto = crit.idAspecto AND res.idRubrica=' . $idRubrica . '
                ORDER BY res.nombre ASC, asp.nombre ASC, crit.nombre ASC;';

        $resultados = $this->db->query($cad)->result_array();

        $puntosArbol = array();

        foreach ($resultados as $resultado) {
            $ramaArbol = array($resultado['idResultado'] =>
                array($resultado['idAspecto']));
            $puntosArbol = array_merge_recursive($puntosArbol, $ramaArbol);
        }
        return $puntosArbol;
    }

    function buscar_tipoNivel($idRubrica) {
        $cad = 'SELECT t.nombre, t.idTiponivel
                FROM rubrica r, tiponivel t
                WHERE r.idTiponivel=t.idTiponivel AND idRubrica=' . $idRubrica;

        $resultado = $this->db->query($cad)->result_array();

        return $resultado;
    }

    function buscar_escalas($idTiponivel) {
        $cad = 'SELECT nombre, valor
                FROM nivel
                WHERE idTiponivel=' . $idTiponivel;

        $resultado = $this->db->query($cad)->result_array();

        return $resultado;
    }

    function buscar_criterios_arbol($idRubrica) {

        $cad = 'SELECT res.nombre resultado, asp.nombre aspecto, crit.nombre criterio, res.idResultado, asp.idAspecto, CONCAT("cri_",crit.idCriterio) as idCriterio
                FROM resultado res,  aspecto asp, criterio crit
                WHERE res.idResultado = asp.idResultado AND asp.idAspecto = crit.idAspecto AND res.idRubrica=' . $idRubrica . '
                ORDER BY res.nombre ASC, asp.nombre ASC, crit.nombre ASC';

        $resultados = $this->db->query($cad)->result_array();

        $puntosArbol = array();

//        foreach ($resultados as $resultado) {
//            $ramaArbol = array($resultado['idResultado'],$resultado['resultado'] =>
//                            array('idAspecto'=>$resultado['idAspecto'],$resultado['aspecto'] =>
//                                array($resultado['criterio'] => $resultado['idCriterio'])));
//            $puntosArbol = array_merge_recursive($puntosArbol, $ramaArbol);
//        }

        foreach ($resultados as $resultado) {
            $ramaArbol = array($resultado['resultado'] =>
                array($resultado['aspecto'] =>
                    array($resultado['criterio'] => $resultado['idCriterio'])));
            $puntosArbol = array_merge_recursive($puntosArbol, $ramaArbol);
        }

        return $puntosArbol;
    }

    function asignar_rubrica_curso($idCurso, $criterios) {

        $this->db->trans_start();
        //REGISTRAR RUBRICA POR CURSO
        $i = 0;

        foreach ($criterios as $criterio) {


            $data = array(
                'idCurso' => $idCurso,
                'idCriterio' => substr($criterio, 4)
            );
            $i++;
            $this->db->insert('criterioxcurso', $data);
        }





        $this->db->trans_complete();

        if ($this->db->trans_status() === FALSE)
            $mensaje = "error";
        else
            $mensaje = "ok";

        return $mensaje;
    }

    function buscar_descripcion($id, $tipo, $atributo) {
        switch ($tipo) {
            case "res":
                $this->db->select($atributo);
                $this->db->where('idResultado', $id);
                $resultado = $this->db->get('resultado')->result_array();
                break;
            case "asp":
                $this->db->select($atributo);
                $this->db->where('idAspecto', $id);
                $resultado = $this->db->get('aspecto')->result_array();
                break;
            case "cri":
                $this->db->select($atributo);
                $this->db->where('idCriterio', $id);
                $resultado = $this->db->get('criterio')->result_array();
                break;
            case "niv":
                $this->db->select($atributo);
                $this->db->where('idNivel', $id);
                $resultado = $this->db->get('nivel')->result_array();
                break;
        }

        return $resultado[0][$atributo];
    }

    function buscar_descripcion_niv($id, $idPadre, $tipo, $atributo) {
        $this->db->select($atributo);
        $this->db->where('idNivel', $id);
        $this->db->where('idCriterio', $idPadre);
        $resultado = $this->db->get('criterioxnivel')->result_array();

        return $resultado[0][$atributo];
    }

    function buscar_criteriosxcurso_evaluacion_arbol($idCurso) {

        $cad = 'SELECT res.nombre resultado, asp.nombre aspecto, crit.nombre criterio, res.idResultado, asp.idAspecto, CONCAT("cri_",crit.idCriterio) as idCriterio
                FROM resultado res, aspecto asp, criterio crit, criterioxcurso cxr
                WHERE res.idResultado = asp.idResultado AND asp.idAspecto = crit.idAspecto 
                AND cxr.idCriterio=crit.idCriterio AND cxr.idCurso=' . $idCurso. '
                ORDER BY res.idResultado, asp.idAspecto, crit.idCriterio';

        $resultados = $this->db->query($cad)->result_array();

        $puntosArbol = array();

        foreach ($resultados as $resultado) {
            $ramaArbol = array($resultado['resultado'] =>
                array($resultado['aspecto'] =>
                    array($resultado['criterio'] => $resultado['idCriterio'])));
            $puntosArbol = array_merge_recursive($puntosArbol, $ramaArbol);
        }

        return $puntosArbol;
    }

    function buscar_ids_criteriosxcurso_evaluacion_arbol($idCurso) {
        $cad = 'SELECT CONCAT("id_res_",res.idResultado) as idResultado, CONCAT("id_asp_",asp.idAspecto) as idAspecto
                FROM resultado res, aspecto asp, criterio crit, criterioxcurso cxr
                WHERE res.idResultado = asp.idResultado AND asp.idAspecto = crit.idAspecto
                AND cxr.idCriterio=crit.idCriterio AND cxr.idCurso=' . $idCurso . '
                GROUP BY CONCAT("id_res_",res.idResultado), CONCAT("id_asp_",asp.idAspecto)
                ORDER BY res.idResultado, asp.idAspecto';

        $resultados = $this->db->query($cad)->result_array();

        $puntosArbol = array();

        foreach ($resultados as $resultado) {
            $ramaArbol = array($resultado['idResultado'] =>
                array($resultado['idAspecto']));
            $puntosArbol = array_merge_recursive($puntosArbol, $ramaArbol);
        }
        return $puntosArbol;
    }

    function buscar_criteriosxcurso_arbol($idCurso) {

        $cad = 'SELECT res.nombre resultado, asp.nombre aspecto, crit.nombre criterio, niv.nombre nivel ,res.idResultado, asp.idAspecto, crit.idCriterio, CONCAT("niv_",niv.idNivel) as idNivel
                FROM resultado res, aspecto asp, criterio crit, nivel niv, criterioxnivel cxn, criterioxcurso cxr
                WHERE res.idResultado = asp.idResultado AND asp.idAspecto = crit.idAspecto AND cxn.idNivel=niv.idNivel AND cxr.idCriterio=cxn.idCriterio
                AND cxr.idCriterio=crit.idCriterio AND cxr.idCurso=' . $idCurso . '
                ORDER BY res.idResultado, asp.idAspecto, crit.idCriterio';

        $resultados = $this->db->query($cad)->result_array();

        $puntosArbol = array();

        foreach ($resultados as $resultado) {
            $ramaArbol = array($resultado['resultado'] =>
                array($resultado['aspecto'] =>
                    array($resultado['criterio'] =>
                        array($resultado['nivel'] => $resultado['idNivel']))));
            $puntosArbol = array_merge_recursive($puntosArbol, $ramaArbol);
        }

        return $puntosArbol;
    }

    
    function buscar_nivelxcriterio($desCriterio){
        
       $cad = 'SELECT cxn.idCriterio, cxn.idNivel, cxn.descripcion 
                FROM criterio c, criterioxnivel cxn 
                where c.descripcion="'.$desCriterio.'" and c.idCriterio=cxn.idCriterio';
                $resultados = $this->db->query($cad)->result_array();
                
          return $resultados;
    }
    
    
    function buscar_rubrica_total($idCurso) {


        $cad = 'SELECT  r.descripcion as desResultado,
                 a.descripcion as desAspecto, 
                 c.descripcion as desCriterio
                FROM   resultado r, aspecto a,criterio c, criterioxcurso cxc, criterioxnivel cxn
                where  cxc.idCurso='.$idCurso.' and 
                cxc.idCriterio=c.idCriterio and 
                a.idAspecto=c.idAspecto and 
                r.idResultado=a.idResultado and 
                cxn.idCriterio=c.idCriterio
                group by  r.idResultado,a.idAspecto,c.idCriterio';
                $resultados = $this->db->query($cad)->result_array();
                
          return $resultados;
        
    }

        function buscar_niveles_total($idCurso) {


        $cad = 'SELECT   cxn.idNivel as nivel
                FROM   resultado r, aspecto a,criterio c, criterioxcurso cxc, criterioxnivel cxn
                where  cxc.idCurso='. $idCurso . ' and 
                cxc.idCriterio=c.idCriterio and 
                a.idAspecto=c.idAspecto and 
                r.idResultado=a.idResultado and 
                cxn.idCriterio=c.idCriterio GROUP BY cxn.idNivel';
                $resultados = $this->db->query($cad)->result_array();
                
          return $resultados;
        
    }
    function buscar_ids_criteriosxcurso_arbol($idCurso) {
        $cad = 'SELECT CONCAT("id_res_",res.idResultado) as idResultado, CONCAT("id_asp_",asp.idAspecto) as idAspecto, CONCAT("id_cri_",crit.idCriterio) as idCriterio
                FROM resultado res, aspecto asp, criterio crit, nivel niv, criterioxnivel cxn, criterioxcurso cxr
                WHERE res.idResultado = asp.idResultado AND asp.idAspecto = crit.idAspecto AND cxn.idNivel=niv.idNivel AND cxr.idCriterio=cxn.idCriterio
                AND cxr.idCriterio=crit.idCriterio AND cxr.idCurso=' . $idCurso . '
                GROUP BY CONCAT("id_res_",res.idResultado), CONCAT("id_asp_",asp.idAspecto), CONCAT("id_cri_",crit.idCriterio)
                ORDER BY res.idResultado, asp.idAspecto, crit.idCriterio';

        $resultados = $this->db->query($cad)->result_array();

        $puntosArbol = array();

        foreach ($resultados as $resultado) {
            $ramaArbol = array($resultado['idResultado'] =>
                array($resultado['idAspecto'] =>
                    array($resultado['idCriterio'])));
            $puntosArbol = array_merge_recursive($puntosArbol, $ramaArbol);
        }
        return $puntosArbol;
    }

    function nombre_curso($idCurso) {
        $this->db->select('nombre');
        $this->db->where('idCurso', $idCurso);
        $resultado = $this->db->get('curso')->result_array();

        return $resultado[0]['nombre'];
    }

}

?>